﻿using System;
using System.Data;
using System.Text;
using System.Web.Services;
using Customs.Components;
using Customs.Components.KDT.SXXK;
using Customs.Components.KDT.SXXK.Info;
using Customs.Components.KDT.ThanhKhoan;
using NguyenPhuLieu=Customs.Components.SXXK.NguyenPhuLieu;
using Customs.Components.KDT.ThanhKhoan.Info;

namespace Customs.WS
{
    /// <summary>
    /// Khai điện tử cho loại hình SXXK.
    /// </summary>
    public class KDT_SXXK_Service : WebService
    {
        #region SXXK: Nguyên phụ liệu.

        /// <summary>
        /// Đăng ký thông tin nguyên phụ liệu.
        /// </summary>
        /// <param name="NPLDangKyInfo">Thông tin đăng ký nguyên phụ liệu.</param>
        /// <param name="DanhSachDaDangKy">Danh sách nguyên phụ liệu đã đăng ký.</param>
        /// <returns>Số tiếp nhận.</returns>
        [WebMethod(Description = "Khai báo danh mục nguyên phụ liệu nhập khẩu")]
        public long NguyenPhuLieu_Send(NguyenPhuLieuDangKyInfo NPLDangKyInfo, ref string[] DanhSachDaDangKy)
        {
            string[] danhsachNPL = new string[NPLDangKyInfo.NPLInfoCollection.Count];
            for (int i = 0; i < NPLDangKyInfo.NPLInfoCollection.Count; i++)
            {
                danhsachNPL[i] = NPLDangKyInfo.NPLInfoCollection[i].Ma;
            }

            DanhSachDaDangKy = NguyenPhuLieu.CheckExist(NPLDangKyInfo.MaHaiQuan, NPLDangKyInfo.MaDoanhNghiep, danhsachNPL);
            if (DanhSachDaDangKy.Length == 0)
            {
                NguyenPhuLieuDangKy nplDangKy = new NguyenPhuLieuDangKy();
                // Khởi tạo các giá trị mặc định.
                if (NPLDangKyInfo.MaDaiLy.Length == 0) NPLDangKyInfo.MaDaiLy = NPLDangKyInfo.MaDoanhNghiep;

                NPLDangKyInfo.NgayTiepNhanChungTu = NPLDangKyInfo.NgayTiepNhan;
                NPLDangKyInfo.SoTiepNhanChungTu = 1;

                // Nạp giá trị từ tham số truyền vào.
                nplDangKy.Load(NPLDangKyInfo);
                return nplDangKy.InsertFull();
            }
            return 0;
        }

        [WebMethod(Description = "Cập nhật thông tin nguyên phụ liệu đã khai báo")]
        public DataSet NguyenPhuLieu_RequestStatus(long SoTiepNhan, string MaHaiQuan, string MaDoanhNghiep, short NamTiepNhan)
        {
            string select = "SELECT * FROM DNPLDK M INNER JOIN DNPLDK_D D ON M.So_TNDKDT = D.So_TNDKDT AND M.Ma_HQTN = D.Ma_HQTN AND M.Nam_TN = D.Nam_TN";
            string where = string.Format(" WHERE M.So_TNDKDT = {0} AND M.Ma_HQTN = '{1}' AND M.MA_DV = '{2}' AND M.Nam_TN = {3}", SoTiepNhan, MaHaiQuan.PadRight(6), MaDoanhNghiep, NamTiepNhan);
            string order = " ORDER BY D.STTHang";
            string query = select + where + order;
            return KDTSelectHelper.SelectDataSetDynamic(query);
        }

        //-----------------------------------------------------------------------------------------
        [WebMethod(Description = "Download toàn bộ nguyên phụ liệu đã khai báo trước đây")]
        public DataSet NguyenPhuLieu_Download(string MaDoanhNghiep)
        {
            StringBuilder query = new StringBuilder();
            query.Append("SELECT ");
            query.Append("M.SO_TNDKDT AS [SoTiepNhan], ");
            query.Append("M.MA_HQTN AS [MaHaiQuan], ");
            query.Append("M.NAM_TN AS [NamTiepNhan], ");
            query.Append("M.MA_DV AS [MaDoanhNghiep], ");
            query.Append("M.NGAY_TN AS [NgayTiepNhan], ");
            query.Append("M.MA_DVKB AS [MaDaiLy], ");
            query.Append("M.TrangThaiXL AS [TrangThaiXuLy] ");

            query.Append("FROM ");

            query.Append("DNPLDK M ");
            query.Append("WHERE ");
            query.AppendFormat("M.Ma_DV = '{0}' ", MaDoanhNghiep);
            query.Append("ORDER BY M.MA_DV, M.SO_TNDKDT, M.MA_HQTN, M.NAM_TN");
            return KDTSelectHelper.SelectDataSetDynamic(query.ToString());
        }


        //-----------------------------------------------------------------------------------------

        [WebMethod(Description = "Hủy thông tin nguyên phụ liệu đã khai báo")]
        public bool NguyenPhuLieu_Cancel(long SoTiepNhan, string MaHaiQuan, string MaDoanhNghiep, int NamTiepNhan)
        {
            return NguyenPhuLieuDangKy.HuyThongTinKhaiBao(SoTiepNhan, MaHaiQuan, MaDoanhNghiep, NamTiepNhan);
        }

        //-----------------------------------------------------------------------------------------

        #endregion

        #region SXXK: Sản phẩm.

        /// <summary>
        /// Đăng ký thông tin sản phẩm.
        /// </summary>
        /// <param name="SPDangKyInfo">Thông tin đăng ký sản phẩm.</param>
        /// <param name="DanhSachDaDangKy">Danh sách sản phẩm đã đăng ký.</param>
        /// <returns>Số tiếp nhận.</returns>
        [WebMethod(Description = "Khai báo danh mục sản phẩm xuất khẩu")]
        public long SanPham_Send(SanPhamDangKyInfo SPDangKyInfo, ref string[] DanhSachDaDangKy)
        {
            string[] danhsachSP = new string[SPDangKyInfo.SPInfoCollection.Count];
            for (int i = 0; i < SPDangKyInfo.SPInfoCollection.Count; i++)
            {
                danhsachSP[i] = SPDangKyInfo.SPInfoCollection[i].Ma;
            }

            DanhSachDaDangKy = Customs.Components.SXXK.SanPham.CheckExist(SPDangKyInfo.MaHaiQuan, SPDangKyInfo.MaDoanhNghiep, danhsachSP);
            if (DanhSachDaDangKy.Length == 0)
            {
                SanPhamDangKy spDangKy = new SanPhamDangKy();
                // Khởi tạo các giá trị mặc định.
                if (SPDangKyInfo.MaDaiLy.Length == 0) SPDangKyInfo.MaDaiLy = SPDangKyInfo.MaDoanhNghiep;

                SPDangKyInfo.NgayTiepNhanChungTu = SPDangKyInfo.NgayTiepNhan;
                SPDangKyInfo.SoTiepNhanChungTu = 1;

                // Nạp giá trị từ tham số truyền vào.
                spDangKy.Load(SPDangKyInfo);
                return spDangKy.InsertFull();
            }
            return 0;
        }

        //-----------------------------------------------------------------------------------------

        [WebMethod(Description = "Cập nhật thông tin sản phẩm đã khai báo")]
        public DataSet SanPham_RequestStatus(long SoTiepNhan, string MaHaiQuan, string MaDoanhNghiep, short NamTiepNhan)
        {
            string select = "SELECT * FROM DSPDK M INNER JOIN DSPDK_D D ON M.So_TNDKDT = D.So_TNDKDT AND M.Ma_HQTN = D.Ma_HQTN AND M.Nam_TN = D.Nam_TN";
            string where = string.Format(" WHERE M.So_TNDKDT = {0} AND M.Ma_HQTN = '{1}' AND M.MA_DV = '{2}' AND M.Nam_TN = {3}", SoTiepNhan, MaHaiQuan.PadRight(6), MaDoanhNghiep, NamTiepNhan);
            string order = " ORDER BY D.STTHang";
            string query = select + where + order;
            return KDTSelectHelper.SelectDataSetDynamic(query);
        }

        //-----------------------------------------------------------------------------------------

        [WebMethod(Description = "Hủy thông tin sản phẩm đã khai báo")]
        public bool SanPham_Cancel(long SoTiepNhan, string MaHaiQuan, string MaDoanhNghiep, int NamTiepNhan)
        {
            return SanPhamDangKy.HuyThongTinKhaiBao(SoTiepNhan, MaHaiQuan, MaDoanhNghiep, NamTiepNhan);
        }

        #endregion

        #region SXXK: Định mức.

        /// <summary>
        /// Đăng ký thông tin định mức.
        /// </summary>
        /// <param name="DMDangKyInfo">Thông tin đăng ký định mức.</param>
        /// <returns>Số tiếp nhận.</returns>
        [WebMethod(Description = "Đăng ký định mức sản phẩm đối với loại hình SXXK")]
        public long DinhMuc_Send(ThongTinDinhMucInFo entity)
        {

            ThongTinDinhMuc ttdm = new ThongTinDinhMuc();
            // Nạp giá trị từ tham số truyền vào.
            ttdm.Load(entity);
            return ttdm.InsertFull();
            
            
            /*
            string[] danhsachSP = new string[DMDangKyInfo.DMInfoCollection.Count];
            for (int i = 0; i < DMDangKyInfo.DMInfoCollection.Count; i++)
            {
                danhsachSP[i] = DMDangKyInfo.DMInfoCollection[i].MaSanPham;
            }

            DanhSachSanPhamDaDangKy = DinhMuc.CheckExist(DMDangKyInfo.MaHaiQuan, DMDangKyInfo.MaDoanhNghiep, danhsachSP);
            if (DanhSachSanPhamDaDangKy.Length == 0)
            {
                DinhMucDangKy dmDangKy = new DinhMucDangKy();
                // Khởi tạo các giá trị mặc định.
                DMDangKyInfo.NgayDangKy = DateTime.Today;
                DMDangKyInfo.NamTiepNhan = Convert.ToInt16(DMDangKyInfo.NgayDangKy.Year);
                if (DMDangKyInfo.MaDaiLy.Length == 0)
                    DMDangKyInfo.MaDaiLy = DMDangKyInfo.MaDoanhNghiep;

                DMDangKyInfo.NgayApDung = DateTime.Today;                
                
                // Nạp giá trị từ tham số truyền vào.
                dmDangKy.Load(DMDangKyInfo);
                return dmDangKy.InsertFull();
            }

            return 0;

            */

            //string[] danhsachNPL = new string[NPLDangKyInfo.NPLInfoCollection.Count];
            //for (int i = 0; i < NPLDangKyInfo.NPLInfoCollection.Count; i++)
            //{
            //    danhsachNPL[i] = NPLDangKyInfo.NPLInfoCollection[i].Ma;
            //}

            //DanhSachDaDangKy = NguyenPhuLieu.CheckExist(NPLDangKyInfo.MaHaiQuan, NPLDangKyInfo.MaDoanhNghiep, danhsachNPL);
            //if (DanhSachDaDangKy.Length == 0)
            //{
            //    NguyenPhuLieuDangKy nplDangKy = new NguyenPhuLieuDangKy();
            //    // Khởi tạo các giá trị mặc định.
            //    NPLDangKyInfo.NgayTiepNhan = DateTime.Today;
            //    NPLDangKyInfo.NamTiepNhan = Convert.ToInt16(NPLDangKyInfo.NgayTiepNhan.Year);
            //    if (NPLDangKyInfo.MaDaiLy.Length == 0) NPLDangKyInfo.MaDaiLy = NPLDangKyInfo.MaDoanhNghiep;

            //    NPLDangKyInfo.NgayTiepNhanChungTu = NPLDangKyInfo.NgayTiepNhan;
            //    NPLDangKyInfo.SoTiepNhanChungTu = 1;

            //    // Nạp giá trị từ tham số truyền vào.
            //    nplDangKy.Load(NPLDangKyInfo);
            //    return nplDangKy.InsertFull();
            //}
            //return 0;

        }

        //-----------------------------------------------------------------------------------------

        [WebMethod(Description = "Cập nhật định mức đã khai báo")]
        public DataSet DinhMuc_RequestStatus(long SoTiepNhan, string MaHaiQuan, string MaDoanhNghiep, short NamTiepNhan)
        {
            string select = "SELECT * FROM DDINHMUCDK M INNER JOIN DDINHMUCDK_D D ON M.So_TNDKDT = D.So_TNDKDT AND M.Ma_HQTN = D.Ma_HQTN AND M.Nam_TN = D.Nam_TN";
            string where = string.Format(" WHERE M.So_TNDKDT = {0} AND M.Ma_HQTN = '{1}' AND M.MA_DV = '{2}' AND M.Nam_TN = {3}", SoTiepNhan, MaHaiQuan.PadRight(6), MaDoanhNghiep, NamTiepNhan);
            string order = " ORDER BY D.STTHang";
            string query = select + where + order;
            DataSet ds= KDTSelectHelper.SelectDataSetDynamic(query);
            select = "SELECT * FROM DDINHMUCDK_SP M";
            where = string.Format(" WHERE M.So_TNDKDT = {0} AND M.Ma_HQTN = '{1}' AND M.MA_DV = '{2}' AND M.Nam_TN = {3}", SoTiepNhan, MaHaiQuan.PadRight(6), MaDoanhNghiep, NamTiepNhan);
            query = select + where;
            DataTable table=new DataTable();
            DataSet dsSP = KDTSelectHelper.SelectDataSetDynamic(query);
            foreach (DataColumn col in dsSP.Tables[0].Columns)
            {
                table.Columns.Add(col.ColumnName, col.DataType);
            }
            foreach (DataRow row in dsSP.Tables[0].Rows)
            {
                table.ImportRow(row);
            }
            ds.Tables.Add(table);
            return ds;

        }

        [WebMethod(Description = "Hủy thông tin định mức sản phẩm đã khai báo")]
        public bool DinhMuc_Cancel(long SoTiepNhan, string MaHaiQuan, string MaDoanhNghiep, int NamTiepNhan)
        {
            return ThongTinDinhMuc.HuyThongTinKhaiBao(SoTiepNhan, MaHaiQuan, MaDoanhNghiep, NamTiepNhan);
        }


        #endregion

        #region Thanh khoản

        [WebMethod(Description = "Đăng ký hồ sơ thanh khoản đối với loại hình SXXK")]
        public long ThanhKhoan_Send(HoSoThanhLyDangKyInfo entity)
        {
            return HoSoThanhLyDangKy.KhaiBao(entity);                 
        }

        //-----------------------------------------------------------------------------------------

        [WebMethod(Description = "Cập nhật hồ sơ thanh khoản đã khai báo")]
        public HoSoThanhLyDangKyInfo ThanhKhoan_RequestStatus(long SoTiepNhan, string MaHaiQuan, short NamTiepNhan)
        {
            return HoSoThanhLyDangKy.RequestHoSoThanhLy(SoTiepNhan, MaHaiQuan, NamTiepNhan);           
        }

        [WebMethod(Description = "Hủy thông tin hồ sơ thanh khoản đã khai báo")]
        public bool ThanhKhoan_Cancel(long SoTiepNhan, string MaHaiQuan, short NamTiepNhan)
        {
            return HoSoThanhLyDangKy.HuyThongTinKhaiBao(SoTiepNhan, MaHaiQuan, NamTiepNhan);
        }

       [WebMethod(Description = "Lấy tráng thái thông tin bảng kê hồ sơ thanh khoản đã khai báo")]
        public HoSoThanhLyInfoCollection ThanhKhoan_SatatusBangKe(long SoTiepNhan, string MaHaiQuan, short NamTiepNhan)
        {
            return HoSoThanhLyDangKy.RequestStatusBangKe(SoTiepNhan, MaHaiQuan, NamTiepNhan);
        }
        #endregion

        //-----------------------------------------------------------------------------------------
    }
}